theme.unload_stylesheet(extension.stylesheet.get_path());
}
- extension.stateObj.disable();
+ try {
+ extension.stateObj.disable();
+ } catch(e) {
+ logExtensionError(uuid, e);
+ }
for (let i = 0; i < order.length; i++) {
let uuid = order[i];
extensionOrder.splice(orderIdx, 1);
- extension.state = ExtensionState.DISABLED;
- _signals.emit('extension-state-changed', extension);
+ if ( extension.state != ExtensionState.ERROR ) {
+ extension.state = ExtensionState.DISABLED;
+ _signals.emit('extension-state-changed', extension);
+ }
}
function enableExtension(uuid) {
}
}
- extension.stateObj.enable();
-
- extension.state = ExtensionState.ENABLED;
- _signals.emit('extension-state-changed', extension);
+ try {
+ extension.stateObj.enable();
+ extension.state = ExtensionState.ENABLED;
+ _signals.emit('extension-state-changed', extension);
+ return;
+ } catch(e) {
+ logExtensionError(uuid, e);
+ return;
+ }
}
function logExtensionError(uuid, error) {
} else {
let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
if (enabled) {
- initExtension(extension.uuid);
+ if (!initExtension(extension.uuid))
+ return;
if (extension.state == ExtensionState.DISABLED)
enableExtension(extension.uuid);
} else {
extensionModule = extension.imports.extension;
if (extensionModule.init) {
- extensionState = extensionModule.init(extension);
+ try {
+ extensionState = extensionModule.init(extension);
+ } catch(e) {
+ logExtensionError(uuid, e);
+ return false;
+ }
}
if (!extensionState)
extension.state = ExtensionState.DISABLED;
_signals.emit('extension-loaded', uuid);
+ return true;
}
function getEnabledExtensions() {
newEnabledExtensions.filter(function(uuid) {
return enabledExtensions.indexOf(uuid) == -1;
}).forEach(function(uuid) {
- try {
enableExtension(uuid);
- } catch(e) {
- logExtensionError(uuid, e);
- }
});
// Find and disable all the newly disabled extensions: UUIDs found in the
enabledExtensions.filter(function(item) {
return newEnabledExtensions.indexOf(item) == -1;
}).forEach(function(uuid) {
- try {
disableExtension(uuid);
- } catch(e) {
- logExtensionError(uuid, e);
- }
});
enabledExtensions = newEnabledExtensions;
let finder = new ExtensionUtils.ExtensionFinder();
finder.connect('extension-found', function(signals, extension) {
- try {
- loadExtension(extension);
- } catch(e) {
- logExtensionError(extension.uuid, e);
- }
+ loadExtension(extension);
});
finder.scanExtensions();
}